home *** CD-ROM | disk | FTP | other *** search
GNU Info File | 1995-08-01 | 26.1 KB | 728 lines |
- This is Info file make.info, produced by Makeinfo-1.55 from the input
- file ./make.texinfo.
-
- This file documents the GNU Make utility, which determines
- automatically which pieces of a large program need to be recompiled,
- and issues the commands to recompile them.
-
- This is Edition 0.48, last updated 4 April 1995, of `The GNU Make
- Manual', for `make', Version 3.73 Beta.
-
- Copyright (C) 1988, '89, '90, '91, '92, '93, '94, '95 Free
- Software Foundation, Inc.
-
- Permission is granted to make and distribute verbatim copies of this
- manual provided the copyright notice and this permission notice are
- preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
- this manual under the conditions for verbatim copying, provided that
- the entire resulting derived work is distributed under the terms of a
- permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
- manual into another language, under the above conditions for modified
- versions, except that this permission notice may be stated in a
- translation approved by the Free Software Foundation.
-
- File: make.info, Node: Directory Variables, Prev: Command Variables, Up: Makefile Conventions
-
- Variables for Installation Directories
- ======================================
-
- Installation directories should always be named by variables, so it
- is easy to install in a nonstandard place. The standard names for these
- variables are described below. They are based on a standard filesystem
- layout; variants of it are used in SVR4, 4.4BSD, Linux, Ultrix v4, and
- other modern operating systems.
-
- These two variables set the root for the installation. All the other
- installation directories should be subdirectories of one of these two,
- and nothing should be directly installed into these two directories.
-
- `prefix'
- A prefix used in constructing the default values of the variables
- listed below. The default value of `prefix' should be `/usr/local'
- When building the complete GNU system, the prefix will be empty and
- `/usr' will be a symbolic link to `/'.
-
- `exec_prefix'
- A prefix used in constructing the default values of some of the
- variables listed below. The default value of `exec_prefix' should
- be `$(prefix)'.
-
- Generally, `$(exec_prefix)' is used for directories that contain
- machine-specific files (such as executables and subroutine
- libraries), while `$(prefix)' is used directly for other
- directories.
-
- Executable programs are installed in one of the following
- directories.
-
- `bindir'
- The directory for installing executable programs that users can
- run. This should normally be `/usr/local/bin', but write it as
- `$(exec_prefix)/bin'.
-
- `sbindir'
- The directory for installing executable programs that can be run
- from the shell, but are only generally useful to system
- administrators. This should normally be `/usr/local/sbin', but
- write it as `$(exec_prefix)/sbin'.
-
- `libexecdir'
- The directory for installing executable programs to be run by other
- programs rather than by users. This directory should normally be
- `/usr/local/libexec', but write it as `$(exec_prefix)/libexec'.
-
- Data files used by the program during its execution are divided into
- categories in two ways.
-
- * Some files are normally modified by programs; others are never
- normally modified (though users may edit some of these).
-
- * Some files are architecture-independent and can be shared by all
- machines at a site; some are architecture-dependent and can be
- shared only by machines of the same kind and operating system;
- others may never be shared between two machines.
-
- This makes for six different possibilities. However, we want to
- discourage the use of architecture-dependent files, aside from of object
- files and libraries. It is much cleaner to make other data files
- architecture-independent, and it is generally not hard.
-
- Therefore, here are the variables makefiles should use to specify
- directories:
-
- `datadir'
- The directory for installing read-only architecture independent
- data files. This should normally be `/usr/local/share', but write
- it as `$(prefix)/share'. As a special exception, see `$(infodir)'
- and `$(includedir)' below.
-
- `sysconfdir'
- The directory for installing read-only data files that pertain to a
- single machine-that is to say, files for configuring a host.
- Mailer and network configuration files, `/etc/passwd', and so
- forth belong here. All the files in this directory should be
- ordinary ASCII text files. This directory should normally be
- `/usr/local/etc', but write it as `$(prefix)/etc'.
-
- Do not install executables in this directory (they probably belong
- in `$(libexecdir)' or `$(sbindir))'. Also do not install files
- that are modified in the normal course of their use (programs
- whose purpose is to change the configuration of the system
- excluded). Those probably belong in `$(localstatedir)'.
-
- `sharedstatedir'
- The directory for installing architecture-independent data files
- which the programs modify while they run. This should normally be
- `/usr/local/com', but write it as `$(prefix)/com'.
-
- `localstatedir'
- The directory for installing data files which the programs modify
- while they run, and that pertain to one specific machine. Users
- should never need to modify files in this directory to configure
- the package's operation; put such configuration information in
- separate files that go in `datadir' or `$(sysconfdir)'.
- `$(localstatedir)' should normally be `/usr/local/var', but write
- it as `$(prefix)/var'.
-
- `libdir'
- The directory for object files and libraries of object code. Do
- not install executables here, they probably belong in
- `$(libexecdir)' instead. The value of `libdir' should normally be
- `/usr/local/lib', but write it as `$(exec_prefix)/lib'.
-
- `infodir'
- The directory for installing the Info files for this package. By
- default, it should be `/usr/local/info', but it should be written
- as `$(prefix)/info'.
-
- `includedir'
- The directory for installing header files to be included by user
- programs with the C `#include' preprocessor directive. This
- should normally be `/usr/local/include', but write it as
- `$(prefix)/include'.
-
- Most compilers other than GCC do not look for header files in
- `/usr/local/include'. So installing the header files this way is
- only useful with GCC. Sometimes this is not a problem because some
- libraries are only really intended to work with GCC. But some
- libraries are intended to work with other compilers. They should
- install their header files in two places, one specified by
- `includedir' and one specified by `oldincludedir'.
-
- `oldincludedir'
- The directory for installing `#include' header files for use with
- compilers other than GCC. This should normally be `/usr/include'.
-
- The Makefile commands should check whether the value of
- `oldincludedir' is empty. If it is, they should not try to use
- it; they should cancel the second installation of the header files.
-
- A package should not replace an existing header in this directory
- unless the header came from the same package. Thus, if your Foo
- package provides a header file `foo.h', then it should install the
- header file in the `oldincludedir' directory if either (1) there
- is no `foo.h' there or (2) the `foo.h' that exists came from the
- Foo package.
-
- To tell whether `foo.h' came from the Foo package, put a magic
- string in the file--part of a comment--and grep for that string.
-
- Unix-style man pages are installed in one of the following:
-
- `mandir'
- The directory for installing the man pages (if any) for this
- package. It should include the suffix for the proper section of
- the manual--usually `1' for a utility. It will normally be
- `/usr/local/man/man1', but you should write it as
- `$(prefix)/man/man1'.
-
- `man1dir'
- The directory for installing section 1 man pages.
-
- `man2dir'
- The directory for installing section 2 man pages.
-
- `...'
- Use these names instead of `mandir' if the package needs to
- install man pages in more than one section of the manual.
-
- *Don't make the primary documentation for any GNU software be a
- man page. Write a manual in Texinfo instead. Man pages are just
- for the sake of people running GNU software on Unix, which is a
- secondary application only.*
-
- `manext'
- The file name extension for the installed man page. This should
- contain a period followed by the appropriate digit; it should
- normally be `.1'.
-
- `man1ext'
- The file name extension for installed section 1 man pages.
-
- `man2ext'
- The file name extension for installed section 2 man pages.
-
- `...'
- Use these names instead of `manext' if the package needs to
- install man pages in more than one section of the manual.
-
- And finally, you should set the following variable:
-
- `srcdir'
- The directory for the sources being compiled. The value of this
- variable is normally inserted by the `configure' shell script.
-
- For example:
-
- # Common prefix for installation directories.
- # NOTE: This directory must exist when you start the install.
- prefix = /usr/local
- exec_prefix = $(prefix)
- # Where to put the executable for the command `gcc'.
- bindir = $(exec_prefix)/bin
- # Where to put the directories used by the compiler.
- libexecdir = $(exec_prefix)/libexec
- # Where to put the Info files.
- infodir = $(prefix)/info
-
- If your program installs a large number of files into one of the
- standard user-specified directories, it might be useful to group them
- into a subdirectory particular to that program. If you do this, you
- should write the `install' rule to create these subdirectories.
-
- Do not expect the user to include the subdirectory name in the value
- of any of the variables listed above. The idea of having a uniform set
- of variable names for installation directories is to enable the user to
- specify the exact same values for several different GNU packages. In
- order for this to be useful, all the packages must be designed so that
- they will work sensibly when the user does so.
-
- File: make.info, Node: Quick Reference, Next: Complex Makefile, Prev: Makefile Conventions, Up: Top
-
- Quick Reference
- ***************
-
- This appendix summarizes the directives, text manipulation functions,
- and special variables which GNU `make' understands. *Note Special
- Targets::, *Note Catalogue of Implicit Rules: Catalogue of Rules, and
- *Note Summary of Options: Options Summary, for other summaries.
-
- Here is a summary of the directives GNU `make' recognizes:
-
- `define VARIABLE'
- `endef'
- Define a multi-line, recursively-expanded variable.
- *Note Sequences::.
-
- `ifdef VARIABLE'
- `ifndef VARIABLE'
- `ifeq (A,B)'
- `ifeq "A" "B"'
- `ifeq 'A' 'B''
- `ifneq (A,B)'
- `ifneq "A" "B"'
- `ifneq 'A' 'B''
- `else'
- `endif'
- Conditionally evaluate part of the makefile.
- *Note Conditionals::.
-
- `include FILE'
- Include another makefile.
- *Note Including Other Makefiles: Include.
-
- `override VARIABLE = VALUE'
- `override VARIABLE := VALUE'
- `override VARIABLE += VALUE'
- `override define VARIABLE'
- `endef'
- Define a variable, overriding any previous definition, even one
- from the command line.
- *Note The `override' Directive: Override Directive.
-
- `export'
- Tell `make' to export all variables to child processes by default.
- *Note Communicating Variables to a Sub-`make': Variables/Recursion.
-
- `export VARIABLE'
- `export VARIABLE = VALUE'
- `export VARIABLE := VALUE'
- `export VARIABLE += VALUE'
- `unexport VARIABLE'
- Tell `make' whether or not to export a particular variable to child
- processes.
- *Note Communicating Variables to a Sub-`make': Variables/Recursion.
-
- `vpath PATTERN PATH'
- Specify a search path for files matching a `%' pattern.
- *Note The `vpath' Directive: Selective Search.
-
- `vpath PATTERN'
- Remove all search paths previously specified for PATTERN.
-
- `vpath'
- Remove all search paths previously specified in any `vpath'
- directive.
-
- Here is a summary of the text manipulation functions (*note
- Functions::.):
-
- `$(subst FROM,TO,TEXT)'
- Replace FROM with TO in TEXT.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(patsubst PATTERN,REPLACEMENT,TEXT)'
- Replace words matching PATTERN with REPLACEMENT in TEXT.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(strip STRING)'
- Remove excess whitespace characters from STRING.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(findstring FIND,TEXT)'
- Locate FIND in TEXT.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(filter PATTERN...,TEXT)'
- Select words in TEXT that match one of the PATTERN words.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(filter-out PATTERN...,TEXT)'
- Select words in TEXT that *do not* match any of the PATTERN words.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(sort LIST)'
- Sort the words in LIST lexicographically, removing duplicates.
- *Note Functions for String Substitution and Analysis: Text
- Functions.
-
- `$(dir NAMES...)'
- Extract the directory part of each file name.
- *Note Functions for File Names: Filename Functions.
-
- `$(notdir NAMES...)'
- Extract the non-directory part of each file name.
- *Note Functions for File Names: Filename Functions.
-
- `$(suffix NAMES...)'
- Extract the suffix (the last `.' and following characters) of each
- file name.
- *Note Functions for File Names: Filename Functions.
-
- `$(basename NAMES...)'
- Extract the base name (name without suffix) of each file name.
- *Note Functions for File Names: Filename Functions.
-
- `$(addsuffix SUFFIX,NAMES...)'
- Append SUFFIX to each word in NAMES.
- *Note Functions for File Names: Filename Functions.
-
- `$(addprefix PREFIX,NAMES...)'
- Prepend PREFIX to each word in NAMES.
- *Note Functions for File Names: Filename Functions.
-
- `$(join LIST1,LIST2)'
- Join two parallel lists of words.
- *Note Functions for File Names: Filename Functions.
-
- `$(word N,TEXT)'
- Extract the Nth word (one-origin) of TEXT.
- *Note Functions for File Names: Filename Functions.
-
- `$(words TEXT)'
- Count the number of words in TEXT.
- *Note Functions for File Names: Filename Functions.
-
- `$(firstword NAMES...)'
- Extract the first word of NAMES.
- *Note Functions for File Names: Filename Functions.
-
- `$(wildcard PATTERN...)'
- Find file names matching a shell file name pattern (*not* a `%'
- pattern).
- *Note The Function `wildcard': Wildcard Function.
-
- `$(shell COMMAND)'
- Execute a shell command and return its output.
- *Note The `shell' Function: Shell Function.
-
- `$(origin VARIABLE)'
- Return a string describing how the `make' variable VARIABLE was
- defined.
- *Note The `origin' Function: Origin Function.
-
- `$(foreach VAR,WORDS,TEXT)'
- Evaluate TEXT with VAR bound to each word in WORDS, and
- concatenate the results.
- *Note The `foreach' Function: Foreach Function.
-
- Here is a summary of the automatic variables. *Note Automatic
- Variables: Automatic, for full information.
-
- `$@'
- The file name of the target.
-
- `$%'
- The target member name, when the target is an archive member.
-
- `$<'
- The name of the first dependency.
-
- `$?'
- The names of all the dependencies that are newer than the target,
- with spaces between them. For dependencies which are archive
- members, only the member named is used (*note Archives::.).
-
- `$^'
- `$+'
- The names of all the dependencies, with spaces between them. For
- dependencies which are archive members, only the member named is
- used (*note Archives::.). The value of `$^' omits duplicate
- dependencies, while `$+' retains them and preserves their order.
-
- `$*'
- The stem with which an implicit rule matches (*note How Patterns
- Match: Pattern Match.).
-
- `$(@D)'
- `$(@F)'
- The directory part and the file-within-directory part of `$@'.
-
- `$(*D)'
- `$(*F)'
- The directory part and the file-within-directory part of `$*'.
-
- `$(%D)'
- `$(%F)'
- The directory part and the file-within-directory part of `$%'.
-
- `$(<D)'
- `$(<F)'
- The directory part and the file-within-directory part of `$<'.
-
- `$(^D)'
- `$(^F)'
- The directory part and the file-within-directory part of `$^'.
-
- `$(+D)'
- `$(+F)'
- The directory part and the file-within-directory part of `$+'.
-
- `$(?D)'
- `$(?F)'
- The directory part and the file-within-directory part of `$?'.
-
- These variables are used specially by GNU `make':
-
- `MAKEFILES'
- Makefiles to be read on every invocation of `make'.
- *Note The Variable `MAKEFILES': MAKEFILES Variable.
-
- `VPATH'
- Directory search path for files not found in the current directory.
- *Note `VPATH' Search Path for All Dependencies: General Search.
-
- `SHELL'
- The name of the system default command interpreter, usually
- `/bin/sh'. You can set `SHELL' in the makefile to change the
- shell used to run commands. *Note Command Execution: Execution.
-
- `MAKE'
- The name with which `make' was invoked. Using this variable in
- commands has special meaning. *Note How the `MAKE' Variable
- Works: MAKE Variable.
-
- `MAKELEVEL'
- The number of levels of recursion (sub-`make's).
- *Note Variables/Recursion::.
-
- `MAKEFLAGS'
- The flags given to `make'. You can set this in the environment or
- a makefile to set flags.
- *Note Communicating Options to a Sub-`make': Options/Recursion.
-
- `SUFFIXES'
- The default list of suffixes before `make' reads any makefiles.
-
- File: make.info, Node: Complex Makefile, Next: Concept Index, Prev: Quick Reference, Up: Top
-
- Complex Makefile Example
- ************************
-
- Here is the makefile for the GNU `tar' program. This is a
- moderately complex makefile.
-
- Because it is the first target, the default goal is `all'. An
- interesting feature of this makefile is that `testpad.h' is a source
- file automatically created by the `testpad' program, itself compiled
- from `testpad.c'.
-
- If you type `make' or `make all', then `make' creates the `tar'
- executable, the `rmt' daemon that provides remote tape access, and the
- `tar.info' Info file.
-
- If you type `make install', then `make' not only creates `tar',
- `rmt', and `tar.info', but also installs them.
-
- If you type `make clean', then `make' removes the `.o' files, and
- the `tar', `rmt', `testpad', `testpad.h', and `core' files.
-
- If you type `make distclean', then `make' not only removes the same
- files as does `make clean' but also the `TAGS', `Makefile', and
- `config.status' files. (Although it is not evident, this makefile (and
- `config.status') is generated by the user with the `configure' program,
- which is provided in the `tar' distribution, but is not shown here.)
-
- If you type `make realclean', then `make' removes the same files as
- does `make distclean' and also removes the Info files generated from
- `tar.texinfo'.
-
- In addition, there are targets `shar' and `dist' that create
- distribution kits.
-
- # Generated automatically from Makefile.in by configure.
- # Un*x Makefile for GNU tar program.
- # Copyright (C) 1991 Free Software Foundation, Inc.
-
- # This program is free software; you can redistribute
- # it and/or modify it under the terms of the GNU
- # General Public License ...
- ...
- ...
-
- SHELL = /bin/sh
-
- #### Start of system configuration section. ####
-
- srcdir = .
-
- # If you use gcc, you should either run the
- # fixincludes script that comes with it or else use
- # gcc with the -traditional option. Otherwise ioctl
- # calls will be compiled incorrectly on some systems.
- CC = gcc -O
- YACC = bison -y
- INSTALL = /usr/local/bin/install -c
- INSTALLDATA = /usr/local/bin/install -c -m 644
-
- # Things you might add to DEFS:
- # -DSTDC_HEADERS If you have ANSI C headers and
- # libraries.
- # -DPOSIX If you have POSIX.1 headers and
- # libraries.
- # -DBSD42 If you have sys/dir.h (unless
- # you use -DPOSIX), sys/file.h,
- # and st_blocks in `struct stat'.
- # -DUSG If you have System V/ANSI C
- # string and memory functions
- # and headers, sys/sysmacros.h,
- # fcntl.h, getcwd, no valloc,
- # and ndir.h (unless
- # you use -DDIRENT).
- # -DNO_MEMORY_H If USG or STDC_HEADERS but do not
- # include memory.h.
- # -DDIRENT If USG and you have dirent.h
- # instead of ndir.h.
- # -DSIGTYPE=int If your signal handlers
- # return int, not void.
- # -DNO_MTIO If you lack sys/mtio.h
- # (magtape ioctls).
- # -DNO_REMOTE If you do not have a remote shell
- # or rexec.
- # -DUSE_REXEC To use rexec for remote tape
- # operations instead of
- # forking rsh or remsh.
- # -DVPRINTF_MISSING If you lack vprintf function
- # (but have _doprnt).
- # -DDOPRNT_MISSING If you lack _doprnt function.
- # Also need to define
- # -DVPRINTF_MISSING.
- # -DFTIME_MISSING If you lack ftime system call.
- # -DSTRSTR_MISSING If you lack strstr function.
- # -DVALLOC_MISSING If you lack valloc function.
- # -DMKDIR_MISSING If you lack mkdir and
- # rmdir system calls.
- # -DRENAME_MISSING If you lack rename system call.
- # -DFTRUNCATE_MISSING If you lack ftruncate
- # system call.
- # -DV7 On Version 7 Unix (not
- # tested in a long time).
- # -DEMUL_OPEN3 If you lack a 3-argument version
- # of open, and want to emulate it
- # with system calls you do have.
- # -DNO_OPEN3 If you lack the 3-argument open
- # and want to disable the tar -k
- # option instead of emulating open.
- # -DXENIX If you have sys/inode.h
- # and need it 94 to be included.
-
- DEFS = -DSIGTYPE=int -DDIRENT -DSTRSTR_MISSING \
- -DVPRINTF_MISSING -DBSD42
- # Set this to rtapelib.o unless you defined NO_REMOTE,
- # in which case make it empty.
- RTAPELIB = rtapelib.o
- LIBS =
- DEF_AR_FILE = /dev/rmt8
- DEFBLOCKING = 20
-
- CDEBUG = -g
- CFLAGS = $(CDEBUG) -I. -I$(srcdir) $(DEFS) \
- -DDEF_AR_FILE=\"$(DEF_AR_FILE)\" \
- -DDEFBLOCKING=$(DEFBLOCKING)
- LDFLAGS = -g
-
- prefix = /usr/local
- # Prefix for each installed program,
- # normally empty or `g'.
- binprefix =
-
- # The directory to install tar in.
- bindir = $(prefix)/bin
-
- # The directory to install the info files in.
- infodir = $(prefix)/info
-
- #### End of system configuration section. ####
-
- SRC1 = tar.c create.c extract.c buffer.c \
- getoldopt.c update.c gnu.c mangle.c
- SRC2 = version.c list.c names.c diffarch.c \
- port.c wildmat.c getopt.c
- SRC3 = getopt1.c regex.c getdate.y
- SRCS = $(SRC1) $(SRC2) $(SRC3)
- OBJ1 = tar.o create.o extract.o buffer.o \
- getoldopt.o update.o gnu.o mangle.o
- OBJ2 = version.o list.o names.o diffarch.o \
- port.o wildmat.o getopt.o
- OBJ3 = getopt1.o regex.o getdate.o $(RTAPELIB)
- OBJS = $(OBJ1) $(OBJ2) $(OBJ3)
- AUX = README COPYING ChangeLog Makefile.in \
- makefile.pc configure configure.in \
- tar.texinfo tar.info* texinfo.tex \
- tar.h port.h open3.h getopt.h regex.h \
- rmt.h rmt.c rtapelib.c alloca.c \
- msd_dir.h msd_dir.c tcexparg.c \
- level-0 level-1 backup-specs testpad.c
-
- all: tar rmt tar.info
-
- tar: $(OBJS)
- $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
-
- rmt: rmt.c
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ rmt.c
-
- tar.info: tar.texinfo
- makeinfo tar.texinfo
-
- install: all
- $(INSTALL) tar $(bindir)/$(binprefix)tar
- -test ! -f rmt || $(INSTALL) rmt /etc/rmt
- $(INSTALLDATA) $(srcdir)/tar.info* $(infodir)
-
- $(OBJS): tar.h port.h testpad.h
- regex.o buffer.o tar.o: regex.h
- # getdate.y has 8 shift/reduce conflicts.
-
- testpad.h: testpad
- ./testpad
-
- testpad: testpad.o
- $(CC) -o $@ testpad.o
-
- TAGS: $(SRCS)
- etags $(SRCS)
-
- clean:
- rm -f *.o tar rmt testpad testpad.h core
-
- distclean: clean
- rm -f TAGS Makefile config.status
-
- realclean: distclean
- rm -f tar.info*
-
- shar: $(SRCS) $(AUX)
- shar $(SRCS) $(AUX) | compress \
- > tar-`sed -e '/version_string/!d' \
- -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
- -e q
- version.c`.shar.Z
-
- dist: $(SRCS) $(AUX)
- echo tar-`sed \
- -e '/version_string/!d' \
- -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
- -e q
- version.c` > .fname
- -rm -rf `cat .fname`
- mkdir `cat .fname`
- ln $(SRCS) $(AUX) `cat .fname`
- -rm -rf `cat .fname` .fname
- tar chZf `cat .fname`.tar.Z `cat .fname`
-
- tar.zoo: $(SRCS) $(AUX)
- -rm -rf tmp.dir
- -mkdir tmp.dir
- -rm tar.zoo
- for X in $(SRCS) $(AUX) ; do \
- echo $$X ; \
- sed 's/$$/^M/' $$X \
- > tmp.dir/$$X ; done
- cd tmp.dir ; zoo aM ../tar.zoo *
- -rm -rf tmp.dir
-
-